package cn.zhyjohn.paysystem.service;

import cn.zhyjohn.paysystem.common.Response;
import cn.zhyjohn.paysystem.requset.WxRefundParams;

import javax.servlet.http.HttpServletRequest;

/**
 * @author JOHN
 * @title: WeChatService
 * @projectName paysystem
 * @since 2019/8/29
 */
public interface WeChatService {
    /**
     * 通知回调
     * @author JOHN
     * @date 16:43
     **/
    String payNotify(HttpServletRequest request);

    /**
     * 微信H5 支付 <br>
     * 必须再web页面中发起支付且域名已添加到开发配置中
     *
     * @param total_fee 金额
     * @param body      商品描述
     * @author JOHN
     * @date 14:55
     **/
    Response wapPay(HttpServletRequest request, String total_fee, String body);

    /**
     * 公众号支付
     *
     * @param openId    微信用户id
     * @param total_fee 金额
     * @param body      商品描述
     * @author JOHN
     * @date 14:57
     **/
    Response webPay(HttpServletRequest request, String openId, String total_fee, String body);

    /**
     * 生成支付二维码（模式一）并在页面上显示
     *
     * @param product_id 商品id
     * @author JOHN
     * @date 14:58
     **/
    Response scanCodeOne(String product_id);

    /**
     * @description 扫码支付模式一回调
     * @author JOHN
     * @date 15:03
     **/
    Response wxpay();

    /**
     * 扫码支付模式二
     *
     * @param orderNo   订单号
     * @param total_fee 金额
     * @author JOHN
     * @date 15:29
     **/
    Response scanCodeTwo(HttpServletRequest request, String orderNo, String total_fee);

    /**
     * 微信APP支付
     *
     * @param body      描述
     * @param orderNo   订单号
     * @param total_fee 金额
     * @author JOHN
     * @date 15:31
     **/
    Response appPay(HttpServletRequest request, String body, String orderNo, String total_fee);

    /**
     * 微信小程序支付
     *
     * @param openid    微信用户id
     * @param body      描述
     * @param orderNo   订单号
     * @param total_fee 金额
     * @author JOHN
     * @date 15:34
     **/
    Response jsapi(HttpServletRequest request, String openid, String body, String orderNo, String total_fee);

    /**
     * 提现
     *
     * @param openId 微信用户id
     * @param body 描述
     * @param amount 金额
     * @author JOHN
     * @date 10:50
     **/
    Response transfers(HttpServletRequest request, String openId, String body, String amount);

    /**
     * 退款
     * @author JOHN
     * @date 14:34
     * @param params
     **/
    Response refund(WxRefundParams params);
}
